---@diagnostic disable: undefined-global
--- 秒杀原子操作脚本
-- 参数: userId, voucherId

local userId = ARGV[1]
local voucherId = ARGV[2]
local stock_key = "seckill:stock:" .. voucherId
local order_key = "seckill:order:" .. voucherId

-- 1. 检查库存是否存在
local stock = redis.call("GET", stock_key)
if not stock then
    return -3 -- 活动未初始化
end

-- 2. 检查库存是否充足
if tonumber(stock) <= 0 then
    return -1 -- 库存不足
end

-- 3. 严格检查是否重复下单
if redis.call("SISMEMBER", order_key, userId) == 1 then
    return -2 -- 重复下单
end

-- 4. 原子操作
redis.call("DECR", stock_key)         -- 扣减库存
redis.call("SADD", order_key, userId) -- 记录订单
redis.call("EXPIRE", order_key, 86400) -- 设置过期
redis.call('xadd', 'stream.order', '*', 'userId', userId, 'voucherId', voucherId)

return 0 -- 成功